//
//  SPPlayer.h
//  ShandongPoker
//
//  Created by Developer on 2025-01-08.
//  Copyright © 2025 ShandongPoker. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import "../../Core/Utils/SPConstants.h"

@class SPCard;

NS_ASSUME_NONNULL_BEGIN

/**
 * 玩家模型
 * 表示游戏中的一个玩家（包括人类玩家和AI玩家）
 */
@interface SPPlayer : NSObject

/// 玩家ID
@property (nonatomic, strong, readonly) NSString *playerId;

/// 玩家名称
@property (nonatomic, strong) NSString *name;

/// 玩家头像
@property (nonatomic, strong, nullable) UIImage *avatar;

/// 当前筹码数量
@property (nonatomic, assign) NSInteger chips;

/// 手牌
@property (nonatomic, strong) NSMutableArray<SPCard *> *holeCards;

/// 是否为AI玩家
@property (nonatomic, assign, readonly) BOOL isAI;

/// AI难度（仅AI玩家有效）
@property (nonatomic, assign) SPAIDifficulty aiDifficulty;

/// 是否已弃牌
@property (nonatomic, assign) BOOL hasFolded;

/// 是否全下
@property (nonatomic, assign) BOOL isAllIn;

/// 本轮已下注金额
@property (nonatomic, assign) NSInteger currentBet;

/// 总下注金额
@property (nonatomic, assign) NSInteger totalBet;

/// 玩家位置（在桌子上的位置）
@property (nonatomic, assign) NSInteger position;

/// 是否为庄家
@property (nonatomic, assign) BOOL isDealer;

/// 是否为小盲注
@property (nonatomic, assign) BOOL isSmallBlind;

/// 是否为大盲注
@property (nonatomic, assign) BOOL isBigBlind;

/**
 * 初始化人类玩家
 * @param name 玩家名称
 * @param chips 初始筹码
 * @return 玩家实例
 */
- (instancetype)initWithName:(NSString *)name chips:(NSInteger)chips;

/**
 * 初始化AI玩家
 * @param name 玩家名称
 * @param chips 初始筹码
 * @param difficulty AI难度
 * @return AI玩家实例
 */
- (instancetype)initWithName:(NSString *)name 
                       chips:(NSInteger)chips 
                aiDifficulty:(SPAIDifficulty)difficulty;

/**
 * 添加手牌
 * @param card 要添加的牌
 */
- (void)addHoleCard:(SPCard *)card;

/**
 * 清空手牌
 */
- (void)clearHoleCards;

/**
 * 下注
 * @param amount 下注金额
 * @return 是否下注成功
 */
- (BOOL)bet:(NSInteger)amount;

/**
 * 跟注
 * @param amount 跟注金额
 * @return 是否跟注成功
 */
- (BOOL)call:(NSInteger)amount;

/**
 * 加注
 * @param amount 加注金额
 * @return 是否加注成功
 */
- (BOOL)raise:(NSInteger)amount;

/**
 * 全下
 * @return 全下金额
 */
- (NSInteger)allIn;

/**
 * 弃牌
 */
- (void)fold;

/**
 * 重置玩家状态（新一轮开始时调用）
 */
- (void)resetForNewRound;

/**
 * 重置玩家状态（新游戏开始时调用）
 */
- (void)resetForNewGame;

/**
 * 获取玩家可用筹码（总筹码 - 当前下注）
 * @return 可用筹码数量
 */
- (NSInteger)availableChips;

/**
 * 检查是否可以下注指定金额
 * @param amount 下注金额
 * @return 是否可以下注
 */
- (BOOL)canBet:(NSInteger)amount;

@end

NS_ASSUME_NONNULL_END